﻿//	DIBUJA RECTANGULOS. PUEDEN SETEARSE LO BORDES Y LOS RELLENOS. 

import com.dinmax.flash.draw.utilities.*
import com.dinmax.flash.draw.common.*
//import com.dinmax.flash.draw.utilities.*
//import com.dinmax.flash.draw.common.Point

class Rectangulo {
	private var _size:Point;
	private var _location:Point;
	private var _relleno:Boolean; // si es false se crea solo la linea.
	private var _borde:Boolean;
	private var _grosorBorde:Number;
	private var _colorBorde:Number;
	private var _alphaBorde:Number;
	private var _color:Number;
	private var _alpha:Number;
	private var _colors:Array; // Arrays que manipulan el relleno si es GRADIENT
	private var _alphas:Array; //
	private var _ratios:Array; //
	private var _matrix:Object; // domina el gradient
	private var _type:String; // String puede ser "linear" o "radial".
	private var _parent:MovieClip;
	private var _clip:MovieClip;
	public var _nombre:String;
	private var _modo:String;
	
	private static var instanciaNumero:Number=0; 
	public static function getInstancia():String {
		instanciaNumero++;
		return "mcRec"+instanciaNumero;
	}
	
	public function nombre():String {
		return _nombre;
	}
	public function getClip():MovieClip{
		return _clip;
	}
	
	function Rectangulo (parent:MovieClip, x:Number, y:Number, ancho:Number, alto:Number, 
						 color:Number, alpha:Number, normal:Boolean) {
		_location=new Point(x, y);
		if(x==undefined) { _location.setX(0);}
		if(y==undefined) { _location.setY(0);}
		
		_size=new Point(ancho, alto);
		if(ancho==undefined) { _size.setX(50);}
		if(alto==undefined) { _size.setY(50);}
		
		_color = color; if(_color==undefined) { _color=0x000000;}
		_alpha = alpha; if(_alpha==undefined) { _alpha=100;}
		_parent = parent;
		_borde=true;
		if(normal==undefined || normal==true){
			dibujar("normal");
		}
	}
	function setColor(color:Number){
		_color=color;
		refresh();
	}
	function setAlpha(alpha:Number){
		_alpha=alpha;
		refresh();
	}
	
	public function setSize(size:Point, noRefresh:Boolean):Void{
		//trace("Rectangulo.as | setSize() | ancho= "+size.getX());
		//trace("Rectangulo.as | setSize() | alto= "+size.getY());
		_size=size;
		if(!noRefresh){ refresh();}
	};
	public function getSize():Point{
		return _size;
	};
	
	public function setLocation(location:Point, noRefresh:Boolean):Void{
		_location=location;
		if(!noRefresh){ refresh();}
	};
	public function getLocation():Point{
		return _location;
	}
	
	function setBordes(grosor:Number, colorBorde:Number, alphaBorde:Number, relleno:Boolean, seguir:Boolean):Void{
		_borde = false;
		_grosorBorde = grosor; if(grosor==undefined) { _grosorBorde = 0;}
		_colorBorde = colorBorde; if(colorBorde==undefined) {_colorBorde = 0x000000;}
		_alphaBorde = alphaBorde; if(alphaBorde==undefined) {_alphaBorde = 100;}
		_relleno = relleno; if(relleno==undefined) { _relleno = true;}
		if(!relleno) {dibujar();}
		if(seguir && relleno) { dibujar("normal");}
		refresh();
	}
	function setGradient(colors:Array, alphas:Array, ratios:Array, grados:Number, type:String):Void{
		_type = type; if(_type==undefined) { _type="linear";}
		_colors = colors; if(_colors==undefined) { _colors = [0xFFFFFF, 0xc8c8c8];}
		_alphas = alphas; if(_alphas==undefined) { _alphas = [100, 100];}
		_ratios = ratios; if(_ratios==undefined) { _ratios = [0xd, 0xFF];}
		var nGrados:Number = (grados/180)*Math.PI; if (nGrados==undefined) { nGrados=0;}
		_matrix = { matrixType:"box", x:0, y:0, w: getSize().getX(), h: getSize().getY(), r:nGrados }
		dibujar("gradient");
	}
	
	private function dibujar(modo:String):Void {
		_modo=modo;
		
		if(_nombre == undefined){
			_nombre = getInstancia();
		}
		if(_clip==undefined){
			_clip = _parent.createEmptyMovieClip(_nombre, _parent.getNextHighestDepth());
		} 
		//trace("Rectangulo.as | dibujar() | clip= "+_clip+"\nname= "+_nombre);
		_clip.clear();

		if(!_borde){
			_clip.lineStyle(_grosorBorde, _colorBorde, _alphaBorde);
		}
		if(modo=="normal"){
			_clip.beginFill(_color, _alpha);
		} else if(modo=="gradient"){
			_clip.beginGradientFill(_type, _colors, _alphas, _ratios, _matrix);
		}
		_clip.lineTo(0,0);
		_clip.lineTo( getSize().getX(), 0);
		_clip.lineTo( getSize().getX(), getSize().getY());
		_clip.lineTo(0, getSize().getY());
		_clip.lineTo(0,0);
		_clip.endFill();
		_clip._x = getLocation().getX();
		_clip._y = getLocation().getY();
	}

	public function refresh(){
		//trace("\n---\nrectangulo.as refresh()");
		dibujar(_modo);
	}

}